Application Specific Integrated Circuits (ASIC) are Integrated Circuits (IC's) which are designed and manufactured to perform a specific function. ASIC's are typically constructed by selecting standard circuit blocks (macros) for inclusion in an IC and interlinking them such that the overall IC performs the required function. Due to this use of a library of standard building blocks the cost of, and time required for, designing an ASIC to perform a specific function are greatly reduced.
Macros are designed to perform a specific task, however to minimise the number of variants of a given macro it is desirable to provide the ability to configure that macro. In this way a single macro design can be used to perform a number of (related) functions. This is desirable since the design and testing of a macro is highly time consuming and expensive and having to carry out this process for each minor variation would defeat the objective of using an ASIC.
To enable macros to be configured for each specific application they are generally designed to have a number of configuration inputs. When produced as an integrated circuit (IC) these inputs are routed to the relevant nodes in the macro, which can be provided with signals from other units within the IC or from the circuit board on which the IC is mounted. The configuration of the macros is therefore controlled by the design of the circuit board, or by values written to the circuit, which provide the required configuration logic levels for the macros to perform their required function.
A drawback to this method of configuration is that the configuration inputs to a macro increase the number of configuration connections to that macro (and possibly the overall pin count of the IC). The number of parameters in each macro that require configuration rapidly increases as the functionality of the macro increases and so the count of inputs required to perform that configuration also increases rapidly. Providing these configuration inputs and pins affects the cost and complexity of as IC's.
There is therefore a need for a system for configuration which reduces the number of configuration inputs required.
Macros are generally equipped with a set of registers that are used for testing the ASIC or for its configuration. These registers are connected in series in a shift register arrangement and form a so-called ‘scan-chain’. Test or configuration values can be provided to the registers by shifting them along the scan-chain and the state of a macro can be read out by shifting values out along the scan-chain.
For configuration purposes the relevant registers of the scan-chain have outputs so connected to circuitry in the macro as to effect the desired change in configuration. For testing, the relevant registers are connected to provide or sample the levels at key nodes of the circuitry, which frequently are signal inputs or outputs to the macro that are provided for the macro's intended function in the ASIC. (Such scan testing can also be used at the circuit board level to ensure connections between ICs on the circuit board are correct, since the inputs and outputs of a macro may be at the boundary of an IC—this form of testing has been standardised in the J-TAG testing standard.)
The scan-chain is provided with a common clock signal. On each tick of the clock signal each register of the scan-chain passes its contents to the next register in the chain. Data presented at the input to the scan-chain is therefore clocked along the chain of registers until it gets to the last register in the chain from where it is passed back out of the chain. A scan-chain can be constructed from a number of macros in a single IC, or of macros in multiple ICs.
As described above, it is possible and known to utilise registers in the scan-chain to configure a macro. To do this the configuration data is presented at the input to the scan-chain in the correct order and the scan-chain clocked the correct number of times so that the data arrives at the required registers. Since it is not generally possible to control different parts of a scan-chain within a macro independently the data is latched into all of the registers simultaneously in a macro and all of the registers in a macro must therefore be programmed at the same time. This means that whatever method is used to program the registers it must take into account the purpose of all the registers in a macro and provide suitable values for them all, even if their values are not changed by the configuration.
Since access to a given register in the scan-chain is by sequential transfer of data along the chain, as opposed to direct access to a register, it is necessary to assemble all of the values into the correct order, which requires knowledge of both the length of the registers within a macro and their order in the scan-chain. All of this is inconvenient if it is desired to change the value of just one or a few of the registers.